Mehmet-Büyüközer
SSH Server - Güvenlik
Mon, 15 May 2006 01:45:06 +0000
 www.linux.org.tr sitesi altında tutulan,  linux-ağ  e-mail grubunda geçtiğimiz hafta güzel bir konu geçti. İlk soruya gelen emailler ve önerilen metodlar da, bence, bi kısmı hariç uygulanabilir, pratik çözümlerdi. E-mail gruplarında rahatsız eden bir konu olan, aynı sorunun tekrarlanması durumuna çözüm olması için, soruyu ve önerilen çözünmleri, uygulanabilirlik ve sorunu ortadan kaldırabilme oranlarına göre sıralayıp buraya eklemeye karar verdim. 
  Soru:  
Merhabalar, 
 Yurt disinda kiralik bi sunucu uzerinde linux server var. devamli ssh ile baglanti kurup dictionary attack yapiyorlar. sabit bir ipden baglanmadigim icin bu sunucuya ssh serveri sadece bir ipden baglanti kabul edecek sekilde konfigure etmiyorum. buna ne gibi bir cozum onerirsiniz? 
 Mesela su bir cozum mudur? 
ssh 3 defa hatali sifre girildikten sonra birdaha o ipden mesela 1 saat boyunca baglanti kabul etmesin? 
  Cevaplar:  
 
  Port Knocking  
Diğer cevaplar güzel ve uygulanabilir olduğu için ben de email ile bişeyler eklemek istemedim ama bundan önce sitede yazdığım  Port Knocking  yazısı bu durum için çok uygun gözüküyor. Kısaca özetlemek gerekirse, 22. porttan bağlantı kurulabilmesi için, önceden bilinen başka portlara bağlantı denenmesi gerekiyor, eğer o şartlar sağlandıysa 22. porttan yapılmak istenen bağlantıya izin veriliyor. 
  SSH Server&#8217;in Port Numarasını Değiştirmek  
Merhaba, 
Bunun yerine en kolay cozum olan SSH portunu degistirmeyi deneyebilirsiniz. Varsayilan portu degistirdikten sonra otomatize ataklarin cogu kesilecektir. 
  Mehmet:  Güvenlik alanında bu konu çok tartışılıyor. Security vs obscurity yani güvenlik vs gizlilik (engellemek yerine ulaşılmaması için önüne bir set daha eklemek, 22. port yerine 65522. portun kullanılması, diğer 65500 portu tarayıp, 65522. portu bulabilir). Bu olay tartışıla dursun, bence uzaktan erişim veren servislerin varsayılı gelen port numaraları (22,23,3389,5900) kullanıma başlanmadan evvel değiştirilmeli. Böylelikle en azından bilgisi olmayan (script kiddie) ve sadece şansını deneyen kişiler dışarda tutulabilir. 
  
  Fail2Ban Ben fail2ban i kullaniyorum. Conf dosyasinda kac basarisiz attacktan 
sonra calisacak, ne kadar sure o ip yi kara listede tutacak vs gibi 
ayarlamalar yapabiliyorsunuz. Inceleseniz iyi olur bence. 
 http://fail2ban.sourceforge.net/wiki/index.php/Main_Page 
  Şifre yerine Sertifika  
En temiz yöntem sshd konfigürasyon dosyasýndan PasswordAuthentication seçeneğini kapatmak. 
Ondan sonra istedikleri kadar deneyip dursunlar. Siz mi nasıl bağlanacaksınız? Tabii ki özel anahtarınızı kullanarak ssh, ssh-keygen, ssh-agent man sayfaları size yok gösterecektir. 
  Deny Hosts  
 DenyHosts projesi  sourceforge.net altında açılmış, kollektif bir çalışmanın ürünü. SSH sunucusuna brute force atak yapan kişileri kara listeyi almayı hedefliyorlar. Ama bu durum Türkiye gibi dinamik IP kullanan DSL kullanıcıları için pek uygun gözükmüyor. 
  Dinamik DNS Merhaba,
 Eğer bu durumda olan fazla kişi yok ise, bizim eskiden uyguladığımız şöyle bir yöntemi önerebilirim. 
- dyndns.org&#8217;dan bir isim almıştım : xxx.dyndns.org 
- bir script aracılığıyla her 2 dakikada bir IPyi kontrol edip, IP değişmişse iptables ile o IPye izin veriyordu eskisini siliyordu. 
- bağlanacağım zaman dyndns hostunun IPsini düzeltiyordum ve servera ulaşıyordum. 
- tabii diğer bütün IPlere ssh kapalı idi. 
  Hostname Bazlı Sınırlama Evet.Port scanner ile port degisse bile bulunabilir. Bana gore ssh&#8217;a sadece bir hostname den izin verebilirsiniz. Nasil diye sorarsan, 7/24 calisan bir linux makinanin hostnamemini verirsiniz.. AllowUsers&#8217;i da ekleyip sadece ssh baglantisi kurabilecek kullanicilara ssh acarsiniz. PermitRootLogin &#8216;nide no yaparsaniz daha iyi olur. iptables &#8216;e agelince.
 iptables &#8216;ile sadece bir ip&#8217;yi ssh a acmak için soyle bir kural ise yarayabilir.. 
 iptables -A INPUT -s 213.243.12.33 -p tcp &#8211;dport 22 -j ACCEPT 
 Gelen her IP icin 60 saniyede sadece 3 baglanma şansı veriyor . 3 ssh baglanti siniri asilirsa bir 60 saniye o ip&#8217;yi dropluyor. -j LOG parametresi ile hersey loglara yaziliyor.Loglar /var/log/messages &#8216;de. 
 *iptables -A INPUT -p tcp &#8211;dport 22 -m state &#8211;state NEW -m recent &#8211;set &#8211;name SSH -j ACCEPT 
*iptables -A INPUT -p tcp &#8211;dport 22 -m recent &#8211;update &#8211;seconds 60 &#8211;hitcount 4 &#8211;rttl &#8211;name SSH -j LOG &#8211;log-prefix &#8220;SSH_brute_force &#8221; 
*iptables -A INPUT -p tcp &#8211;dport 22 -m recent &#8211;update &#8211;seconds 60 &#8211;hitcount 4 &#8211;rttl &#8211;name SSH -j DROP 
 Ayrıca port scanner yapanlarda; 
 iptables -A FORWARD -p tcp &#8211;tcp-flags SYN,ACK,FIN,RST RST -m limit &#8211;limit 10/h -j LOG &#8211;log-prefix &#8216;Port Scanner attack&#8217; 
 kurali ile loglara dokebilirsiniz. loglari daha iyi gorebilmek için, iptables_logger_v0.4 kullanabilirsiniz. 
 
  Bu Yazıyı Paylaşın 
 
